手记

Jira容器化 + Openshift Jira模板创建

因为应用容器化部署已经是标准化的流程,无需再详篇介绍具体的部署流程。所以本文只提供相关的配置文档。如果对部署过程不了解的同学,请先自学容器基础。
镜像已经创建好了,如下

docker.io/xhuaustc/jira-software:7.11.0
docker.io/xhuaustc/atlassian-mysql:5.7

镜像构建配置

Jira容器构建

git clone https://github.com/cptactionhank/docker-atlassian-jira-software

将setenv.sh与atlassian-extras-3.2.jar拷贝到docker-atlassian-jira-software

# setenv.sh## One way to set the JIRA HOME path is here via this variable.  Simply uncomment it and set a valid path like /jira/home.  You can of course set it outside in the command terminal.  That will also work.##JIRA_HOME=""##  Occasionally Atlassian Support may recommend that you set some specific JVM arguments.  You can use this variable below to do that.#JVM_SUPPORT_RECOMMENDED_ARGS=""## The following 2 settings control the minimum and maximum given to the JIRA Java virtual machine.  In larger JIRA instances, the maximum amount will need to be increased.#JVM_MINIMUM_MEMORY=${JVM_XMS:-384m}JVM_MAXIMUM_MEMORY=${JVM_XMX:-768m}## The following are the required arguments for JIRA.#JVM_REQUIRED_ARGS='-Djava.awt.headless=true -Datlassian.standalone=JIRA -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dmail.mime.decodeparameters=true -Dorg.dom4j.factory=com.atlassian.core.xml.InterningDocumentFactory'# Uncomment this setting if you want to import data without notifications##DISABLE_NOTIFICATIONS=" -Datlassian.mail.senddisabled=true -Datlassian.mail.fetchdisabled=true -Datlassian.mail.popdisabled=true"#-----------------------------------------------------------------------------------## In general don't make changes below here##-----------------------------------------------------------------------------------#-----------------------------------------------------------------------------------# Prevents the JVM from suppressing stack traces if a given type of exception# occurs frequently, which could make it harder for support to diagnose a problem.#-----------------------------------------------------------------------------------JVM_EXTRA_ARGS="-XX:-OmitStackTraceInFastThrow"PRGDIR=`dirname "$0"`
cat "${PRGDIR}"/jirabanner.txt

JIRA_HOME_MINUSD=""if [ "$JIRA_HOME" != "" ]; then
    echo $JIRA_HOME | grep -q " "
    if [ $? -eq 0 ]; then
        echo ""
        echo "--------------------------------------------------------------------------------------------------------------------"
        echo "   WARNING : You cannot have a JIRA_HOME environment variable set with spaces in it.  This variable is being ignored"
        echo "--------------------------------------------------------------------------------------------------------------------"
    else
        JIRA_HOME_MINUSD=-Djira.home=$JIRA_HOME
    fifiJAVA_OPTS="-Xms${JVM_MINIMUM_MEMORY} -Xmx${JVM_MAXIMUM_MEMORY} ${JAVA_OPTS} ${JVM_REQUIRED_ARGS} ${DISABLE_NOTIFICATIONS} ${JVM_SUPPORT_RECOMMENDED_ARGS} ${JVM_EXTRA_ARGS} ${JIRA_HOME_MINUSD} ${START_JIRA_JAVA_OPTS}"export JAVA_OPTS# DO NOT remove the following line# !INSTALLER SET JAVA_HOMEecho ""echo "If you encounter issues starting or stopping JIRA, please see the Troubleshooting guide at http://confluence.atlassian.com/display/JIRA/Installation+Troubleshooting+Guide"echo ""if [ "$JIRA_HOME_MINUSD" != "" ]; then
    echo "Using JIRA_HOME:       $JIRA_HOME"fi# set the location of the pid fileif [ -z "$CATALINA_PID" ] ; then
    if [ -n "$CATALINA_BASE" ] ; then
        CATALINA_PID="$CATALINA_BASE"/work/catalina.pid    elif [ -n "$CATALINA_HOME" ] ; then
        CATALINA_PID="$CATALINA_HOME"/work/catalina.pid    fifiexport CATALINA_PIDif [ -z "$CATALINA_BASE" ]; then
  if [ -z "$CATALINA_HOME" ]; then
    LOGBASE=$PRGDIR
    LOGTAIL=..  else
    LOGBASE=$CATALINA_HOME
    LOGTAIL=.  fielse
  LOGBASE=$CATALINA_BASE
  LOGTAIL=.fiPUSHED_DIR=`pwd`cd $LOGBASEcd $LOGTAILLOGBASEABS=`pwd`cd $PUSHED_DIRecho ""echo "Server startup logs are located in $LOGBASEABS/logs/catalina.out"# Set the JVM arguments used to start JIRA. For a description of the options, see# http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#-----------------------------------------------------------------------------------# This allows us to actually debug GC related issues by correlating timestamps# with other parts of the application logs.#-----------------------------------------------------------------------------------GC_JVM_PARAMETERS=""GC_JVM_PARAMETERS="-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCCause ${GC_JVM_PARAMETERS}"GC_JVM_PARAMETERS="-Xloggc:$LOGBASEABS/logs/atlassian-jira-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M ${GC_JVM_PARAMETERS}"CATALINA_OPTS="${GC_JVM_PARAMETERS} ${CATALINA_OPTS}"export CATALINA_OPTS

构建Dockerfile

#DockerfileFROM openjdk:8-alpine# Configuration variables.ENV JIRA_HOME     /var/atlassian/jira
ENV JIRA_INSTALL  /opt/atlassian/jira
ENV JIRA_VERSION  7.11.0# Install Atlassian JIRA and helper tools and setup initial home# directory structure.RUN set -x \
    && apk add --no-cache curl xmlstarlet bash ttf-dejavu libc6-compat \
    && mkdir -p                "${JIRA_HOME}" \
    && mkdir -p                "${JIRA_HOME}/caches/indexes" \
    && chmod -R 777            "${JIRA_HOME}" \
    && mkdir -p                "${JIRA_INSTALL}/conf/Catalina" \
    && curl -Ls                "https://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-software-7.11.0.tar.gz" | tar -xz --directory "${JIRA_INSTALL}" --strip-components=1 --no-same-owner \
    && curl -Ls                "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.38.tar.gz" | tar -xz --directory "${JIRA_INSTALL}/lib" --strip-components=1 --no-same-owner "mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar" \
    && rm -f                   "${JIRA_INSTALL}/lib/postgresql-9.1-903.jdbc4-atlassian-hosted.jar" \
    && curl -Ls                "https://jdbc.postgresql.org/download/postgresql-42.2.1.jar" -o "${JIRA_INSTALL}/lib/postgresql-42.2.1.jar" \
    && chmod -R 777            "${JIRA_INSTALL}/conf" \
    && chmod -R 777            "${JIRA_INSTALL}/logs" \
    && chmod -R 777            "${JIRA_INSTALL}/temp" \
    && chmod -R 777            "${JIRA_INSTALL}/work" \
    && sed --in-place          "s/java version/openjdk version/g" "${JIRA_INSTALL}/bin/check-java.sh" \
    && echo -e                 "\njira.home=$JIRA_HOME" >> "${JIRA_INSTALL}/atlassian-jira/WEB-INF/classes/jira-application.properties" \
    && touch -d "@0"           "${JIRA_INSTALL}/conf/server.xml"# Use the default unprivileged account. This could be considered bad practice# on systems where multiple processes end up being executed by 'daemon' but# here we only ever run one process anyway.# Expose default HTTP connector port.EXPOSE 8080# Set volume mount points for installation and home directory. Changes to the# home directory needs to be persisted as well as parts of the installation# directory due to eg. logs.VOLUME ["/var/atlassian/jira", "/opt/atlassian/jira/logs"]# Set the default working directory as the installation directory.WORKDIR /var/atlassian/jira

COPY "docker-entrypoint.sh" "/"COPY atlassian-extras-3.2.jar ${JIRA_INSTALL}/atlassian-jira/WEB-INF/lib/atlassian-extras-3.2.jar
COPY setenv.sh ${JIRA_INSTALL}/bin/setenv.sh
ENTRYPOINT ["/docker-entrypoint.sh"]# Run Atlassian JIRA as a foreground process by default.CMD ["/opt/atlassian/jira/bin/start-jira.sh", "-fg"]

构建对应的Mysql镜像

# my.cnf[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0character_set_server=utf8
init_connect='SET NAMES utf8'collation_server=utf8_bin
transaction_isolation='read-committed'# Custom config should go here!includedir /etc/mysql/conf.d/

Dockerfile文件

FROM mysql:5.7
COPY my.cnf /etc/mysql/my.cnf

部署镜像

构建docker-compose.yml

jira:
  image: xhuaustc/jira-software:7.11.0
  restart: always
  environment:
    - JVM_XMX=2048m
    - JVM_XMS=1024m
  ports:
    - '8080:8080'
  links:
    - db
  volumes:
    - ./data/jira:/var/atlassian/jira
    - ./data/logs:/opt/atlassian/jira/logs

db:
  image: xhuaustc/atlassian-mysql:5.7
  restart: always
  environment:
    - MYSQL_USER=jira
    - MYSQL_PASSWORD=jira
    - MYSQL_DATABASE=jira
    - MYSQL_ROOT_PASSWORD=jira
  volumes:
    - ./data/mysql:/var/lib/mysql

Openshift Jira模板

apiVersion: v1
kind: Template
metadata:
  name: jira
objects:
- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    labels:
      run: jira
    name: jira
  spec:
    replicas: 1
    selector:
      run: jira
    strategy:
      type: Recreate    template:
      metadata:
        labels:
          run: jira
      spec:
        containers:
        - env:
          - name: JVM_XMX
            value: 2048m
          - name: JVM_XMS
            value: 1024m
          image: docker.io/xhuaustc/jira-software:7.11.0
          imagePullPolicy: IfNotPresent
          name: jira
          volumeMounts:
          - mountPath: /var/atlassian/jira
            name: volume-7iy6x
          - mountPath: /opt/atlassian/jira/logs
            name: volume-zsyly
        volumes:
        - name: volume-7iy6x
          persistentVolumeClaim:
            claimName: jira
        - name: volume-zsyly
          persistentVolumeClaim:
            claimName: jira-log
    triggers:
    - type: ConfigChange
- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    labels:
      run: mysql-jira
    name: mysql-jira
  spec:
    replicas: 1
    selector:
      run: mysql-jira
    strategy:
      type: Recreate    template:
      metadata:
        labels:
          run: mysql-jira
      spec:
        containers:
        - env:
          - name: MYSQL_USER
            value: jira
          - name: MYSQL_PASSWORD
            value: jira
          - name: MYSQL_DATABASE
            value: jira
          - name: MYSQL_ROOT_PASSWORD
            value: jira
          image: docker.io/xhuaustc/atlassian-mysql:5.7
          imagePullPolicy: IfNotPresent
          name: mysql-jira
          volumeMounts:
          - mountPath: /var/lib/mysql
            name: volume-uiwfa
        volumes:
        - name: volume-uiwfa
          persistentVolumeClaim:
            claimName: mysql-jira-data
    triggers:
    - type: ConfigChange
- apiVersion: v1
  kind: Service
  metadata:
    labels:
      run: jira
    name: jira
  spec:
    ports:
    - port: 8080
      protocol: TCP
      targetPort: 8080
    selector:
      run: jira
    type: ClusterIP
- apiVersion: v1
  kind: Service
  metadata:
    labels:
      run: mysql-jira
    name: mysql-jira
  spec:
    ports:
    - port: 3306
      protocol: TCP
      targetPort: 3306
    selector:
      run: mysql-jira
    type: ClusterIP
- apiVersion: v1
  kind: Route
  metadata:
    annotations:
      haproxy.router.openshift.io/timeout: 3000s
    labels:
      run: jira
    name: jira
  spec:
    port:
      targetPort: 8080
    to:
      kind: Service
      name: jira
      weight: 100
    wildcardPolicy: None
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    annotations:
      volume.beta.kubernetes.io/storage-class: ceph-rbd-sc
      volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/rbd
    name: jira
  spec:
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 20Gi
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    annotations:
      volume.beta.kubernetes.io/storage-class: ceph-rbd-sc
      volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/rbd
    name: jira-log
  spec:
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 10Gi
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    annotations:
      volume.beta.kubernetes.io/storage-class: ceph-rbd-sc
      volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/rbd
    name: mysql-jira-data
  spec:
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 10Gi



作者:潘晓华Michael
链接:https://www.jianshu.com/p/744c23f93dfc


0人推荐
随时随地看视频
慕课网APP