为了账号安全,请及时绑定邮箱和手机立即绑定

Jenkins Golang 声明式管道:构建 Docker 镜像并推送到 Docker Hub

Jenkins Golang 声明式管道:构建 Docker 镜像并推送到 Docker Hub

Go
POPMUISE 2023-05-08 15:49:31
我正在尝试创建我的 Golang 项目的 Docker 映像,并通过 Jenkins 声明式管道将其上传到 Docker Hub。我能够构建我的项目并运行我的所有测试。我的Jenkinsfile是这样的:#!/usr/bin/env groovy// The above line is used to trigger correct syntax highlighting.pipeline {    agent { docker { image 'golang' } }    stages {        stage('Build') {               steps {                                                           // Create our project directory.                sh 'cd ${GOPATH}/src'                sh 'mkdir -p ${GOPATH}/src/MY_PROJECT_DIRECTORY'                // Copy all files in our Jenkins workspace to our project directory.                                sh 'cp -r ${WORKSPACE}/* ${GOPATH}/src/MY_PROJECT_DIRECTORY'                // Copy all files in our "vendor" folder to our "src" folder.                sh 'cp -r ${WORKSPACE}/vendor/* ${GOPATH}/src'                // Build the app.                sh 'go build'            }                    }        // Each "sh" line (shell command) is a step,        // so if anything fails, the pipeline stops.        stage('Test') {            steps {                                                // Remove cached test results.                sh 'go clean -cache'                // Run Unit Tests.                sh 'go test ./... -v'                                              }        }               }}   我的Dockerfile(如果需要)如下:# Make a golang container from the "golang alpine" docker image from Docker Hub.FROM golang:1.11.2-alpine3.8# Expose our desired port.EXPOSE 9000# Create the proper directory.RUN mkdir -p $GOPATH/src/MY_PROJECT_DIRECTORY# Copy app to the proper directory for building.ADD . $GOPATH/src/MY_PROJECT_DIRECTORY# Set the work directory.WORKDIR $GOPATH/src/MY_PROJECT_DIRECTORY# Run CMD commands.RUN go get -d -v ./...RUN go install -v ./...# Provide defaults when running the container.# These will be executed after the entrypoint.# For example, if you ran docker run <image>,# then the commands and parameters specified by CMD would be executed.CMD ["MY_PROJECT"]
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

我想到了。


我的更新Jenkinsfile如下:


#!/usr/bin/env groovy

// The above line is used to trigger correct syntax highlighting.


pipeline {

    // Lets Jenkins use Docker for us later.

    agent any    


    // If anything fails, the whole Pipeline stops.

    stages {

        stage('Build & Test') {   

            // Use golang.

            agent { docker { image 'golang' } }


            steps {                                           

                // Create our project directory.

                sh 'cd ${GOPATH}/src'

                sh 'mkdir -p ${GOPATH}/src/MY_PROJECT_DIRECTORY'


                // Copy all files in our Jenkins workspace to our project directory.                

                sh 'cp -r ${WORKSPACE}/* ${GOPATH}/src/MY_PROJECT_DIRECTORY'


                // Copy all files in our "vendor" folder to our "src" folder.

                sh 'cp -r ${WORKSPACE}/vendor/* ${GOPATH}/src'


                // Build the app.

                sh 'go build'               

            }            

        }


        stage('Test') {

            // Use golang.

            agent { docker { image 'golang' } }


            steps {                 

                // Create our project directory.

                sh 'cd ${GOPATH}/src'

                sh 'mkdir -p ${GOPATH}/src/MY_PROJECT_DIRECTORY'


                // Copy all files in our Jenkins workspace to our project directory.                

                sh 'cp -r ${WORKSPACE}/* ${GOPATH}/src/MY_PROJECT_DIRECTORY'


                // Copy all files in our "vendor" folder to our "src" folder.

                sh 'cp -r ${WORKSPACE}/vendor/* ${GOPATH}/src'


                // Remove cached test results.

                sh 'go clean -cache'


                // Run Unit Tests.

                sh 'go test ./... -v -short'            

            }

        }      


        stage('Docker') {         

            environment {

                // Extract the username and password of our credentials into "DOCKER_CREDENTIALS_USR" and "DOCKER_CREDENTIALS_PSW".

                // (NOTE 1: DOCKER_CREDENTIALS will be set to "your_username:your_password".)

                // The new variables will always be YOUR_VARIABLE_NAME + _USR and _PSW.

                // (NOTE 2: You can't print credentials in the pipeline for security reasons.)

                DOCKER_CREDENTIALS = credentials('my-docker-credentials-id')

            }


            steps {                           

                // Use a scripted pipeline.

                script {

                    node {

                        def app


                        stage('Clone repository') {

                            checkout scm

                        }


                        stage('Build image') {                            

                            app = docker.build("${env.DOCKER_CREDENTIALS_USR}/my-project-img")

                        }


                        stage('Push image') {  

                            // Use the Credential ID of the Docker Hub Credentials we added to Jenkins.

                            docker.withRegistry('https://registry.hub.docker.com', 'my-docker-credentials-id') {                                

                                // Push image and tag it with our build number for versioning purposes.

                                app.push("${env.BUILD_NUMBER}")                      


                                // Push the same image and tag it as the latest version (appears at the top of our version list).

                                app.push("latest")

                            }

                        }              

                    }                 

                }

            }

        }

    }


    post {

        always {

            // Clean up our workspace.

            deleteDir()

        }

    }

}   



查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信